SQL a promenna_zacatecnik

Otázka od: Ladislav Novak

1. 5. 2004 19:43

Zdravim vsechny a mam tu opet jeden zacatecnicky problemek, tak me
prosim nebijte...

vkladam pomoci SQL do tabulky data z promennych a narazil jsem na tento
problem..

muj priklad:

procedure TForm1.btnVlozClick(Sender: TObject);
        var a,b: string;
begin
        a := editJmeno.Text;
        b := 'Novak';

        IBQuery1.SQL.Clear;

        IBQuery1.SQL.Add('INSERT INTO pokus (jmeno, prijmeni, vek )');
        IBQuery1.SQL.Add('VALUES (:jmeno, :prijmeni, :vek )');

        IBQuery1.Params[0].AsString := a;
        IBQuery1.Params[1].AsString := b;
        IBQuery1.Params[2].AsSmallInt := 22;

        IBQuery1.ExecSQL;

end;

Pokud je v promenne b jako prijmeni 'Novak', vse je v poradku, ale pokud
pouziju cestinu a dam tam 'Novaka',
je problem..

Poradi nekdo jak na to?

Dekuji moc,
Lada


Odpovedá: Fedor 'fi0dor' Tirsel

2. 5. 2004 4:23

: procedure TForm1.btnVlozClick(Sender: TObject);
: var a,b: string;
: begin
: a := editJmeno.Text;
: b := 'Novak';
:
: IBQuery1.SQL.Clear;
:
: IBQuery1.SQL.Add('INSERT INTO pokus (jmeno, prijmeni, vek )');
: IBQuery1.SQL.Add('VALUES (:jmeno, :prijmeni, :vek )');
:
: IBQuery1.Params[0].AsString := a;
: IBQuery1.Params[1].AsString := b;
: IBQuery1.Params[2].AsSmallInt := 22;
:
: IBQuery1.ExecSQL;
:
: end;
:
: Pokud je v promenne b jako prijmeni 'Novak', vse je v poradku, ale pokud
: pouziju cestinu a dam tam 'Novaka',
: je problem..

Zdravim,

zdrojak je v poriadku, najskor bude chyba na strane DB servera (interbase ci
firebird?) -- skontrolujte si ci sa k DB pripajate s kodovanim, ktore podporuje
cestinu (napr. win1250), taktiez ci mate nastavene kodovanie tabulky
podporujuce
cestinu, pripadne ci mate spravny CHARACTER SET v definciach stlpcov tabulky,
do
ktorej sa snazite vkladat diakritiku.

ps: btw. presne znenie vratenej chybovej hlasky by vcelku pomohlo ;)

S pozdravom...
--
Fedor 'fi0dor' Tirsel
www.fi0dor.info


Odpovedá: Ladislav Novak

2. 5. 2004 13:04


>zdrojak je v poriadku, najskor bude chyba na strane DB servera (interbase ci
>firebird?) -- skontrolujte si ci sa k DB pripajate s kodovanim, ktore
podporuje
>cestinu (napr. win1250), taktiez ci mate nastavene kodovanie tabulky
podporujuce
>cestinu, pripadne ci mate spravny CHARACTER SET v definciach stlpcov tabulky,
do
>ktorej sa snazite vkladat diakritiku.
>
>ps: btw. presne znenie vratenej chybovej hlasky by vcelku pomohlo ;)
>
>S pozdravom...
>--
>Fedor 'fi0dor' Tirsel
>www.fi0dor.info
>
>
Diky,

DB je Firebird 1.5 a v IBExpert jsem si nastavil Charset win1250..
Bohuzel uz nevim, kde jinde kodovani nastavit..
Je potreba nastavit nekde nejakou vlastnost komponenty Delphi...?

Chybova hlaska je
'arithmetic exception, numeric overflow, or string
truncation
Cannot transliterate character between character sets'

Dik moc,

Lada.



Odpovedá: Jaroslav Uher

2. 5. 2004 13:43

On 2 May 2004 at 13:53, Ladislav Novak wrote:
 
> DB je Firebird 1.5 a v IBExpert jsem si nastavil Charset win1250..

charset si musis nastavit jiz pri generovani databaze
napr.

SET SQL DIALECT 3;
CREATE DATABASE 'C:\SKLDATA.FDB' PAGE_SIZE 4096
USER 'sysdba' PASSWORD 'masterkey'
DEFAULT CHARACTER SET WIN1250;

> Bohuzel uz nevim, kde jinde kodovani nastavit.. Je potreba nastavit
> nekde nejakou vlastnost komponenty Delphi...?

a potom v kazdem poli tabulky, kde chces vladat ceske znaky
napr.
PRIJMENI VARCHAR(25) CHARACTER SET WIN1250,
JMENO VARCHAR(25) CHARACTER SET WIN1250,

a to same u Store Procerures, pokud je pouzivas

V Delphi potom u kazdeho editu (kde vkladas string) by sis mel
nastavit MaxLength na delku pole tabulky

> Chybova hlaska je
'arithmetic exception, numeric overflow, or string
> truncation Cannot transliterate character between character sets'

zkus to opravit a hlaska by mela zmizet.

Jarek Uher


Odpovedá: Ladislav Novak

2. 5. 2004 16:23

Jaroslav Uher napsal(a):

>On 2 May 2004 at 13:53, Ladislav Novak wrote:
>
>
>
>>DB je Firebird 1.5 a v IBExpert jsem si nastavil Charset win1250..
>>
>>
>
>charset si musis nastavit jiz pri generovani databaze
>napr.
>
>SET SQL DIALECT 3;
>CREATE DATABASE 'C:\SKLDATA.FDB' PAGE_SIZE 4096
>USER 'sysdba' PASSWORD 'masterkey'
>DEFAULT CHARACTER SET WIN1250;
>
>
>
>a potom v kazdem poli tabulky, kde chces vladat ceske znaky
>napr.
>PRIJMENI VARCHAR(25) CHARACTER SET WIN1250,
>JMENO VARCHAR(25) CHARACTER SET WIN1250,
>
>a to same u Store Procerures, pokud je pouzivas
>
>V Delphi potom u kazdeho editu (kde vkladas string) by sis mel
>nastavit MaxLength na delku pole tabulky
>
>
>
>>Chybova hlaska je
'arithmetic exception, numeric overflow, or string
>>truncation Cannot transliterate character between character sets'
>>
>>
>
>zkus to opravit a hlaska by mela zmizet.
>
>Jarek Uher
>
>

Ahoj,

dik, ale tohle vsechno mam myslim nastaveno spravne..
kdyz se podivam v IBExpert do Database Registration info, mam v Database
Properties Charset Win1250,
SQL Dialect 3, jenom je tam jeste Font Characters Set nastaveny na
ANSI_CHARSET. (ale s tim jsem taky zkousel hybat a nema to na muj
problem asi vliv)
Pro kazde pole VARCHAR v tabulce mam taky nastaveny Charset Win1250... a
delka retezce v tom editu nehraje snad roli, protoze to nelze uz pri
prvnim znaku s diakritikou.
takze mne zatim docela dochazi fantazie...  

Diky,
Lada


Odpovedá: Jiri Semler

2. 5. 2004 18:43


>Chybova hlaska je
'arithmetic exception, numeric overflow, or string
>truncation
>Cannot transliterate character between character sets'
>
>
>
Tato hlaska se mi zobrazuje, kdyz se snazim ulozit string delsi nez je
pole v tabulce.

Jiri Semler


Odpovedá: Lebeda David

3. 5. 2004 5:43

> DB je Firebird 1.5 a v IBExpert jsem si nastavil Charset win1250..
> Bohuzel uz nevim, kde jinde kodovani nastavit.. Je potreba nastavit
> nekde nejakou vlastnost komponenty Delphi...?
>
> Chybova hlaska je
'arithmetic exception, numeric overflow, or string
> truncation Cannot transliterate character between character sets'
>

Ahoj,

kdyz dvojkliknes na komponentu TIBDatabase, mas tam tez navoleny
nejaky charset? Charset se nastavuje jednak pro databazi, druhak i
pro pripojeni.

David Lebeda